home *** CD-ROM | disk | FTP | other *** search
/ Master Visual Basic 3 / Master Visual Basic 3 (SAMS Publishing) (1994).ISO / mvprog / genvbx / generic.c < prev    next >
C/C++ Source or Header  |  1994-01-07  |  6KB  |  233 lines

  1. //-------------------------------------------------------
  2. // GENERIC.C
  3. //-------------------------------------------------------
  4. // Contains code for Generic VBX control.
  5. //
  6. // Use the following files as templates for building your
  7. // own VBX control:
  8. //
  9. // - GENERIC.C (this file)
  10. // - GENERIC.H
  11. // - GENERIC.DEF
  12. // - GENERIC.RC 
  13. //-------------------------------------------------------
  14.  
  15. #include <windows.h>
  16. #include "vbapi.h"
  17. #include "GENERIC.H"
  18.  
  19. //------------------------------------------------------
  20. // Global Variables
  21. //------------------------------------------------------
  22. HANDLE hmodDLL;
  23.  
  24.  
  25. //------------------------------------------------------
  26. // Local Prototypes
  27. //------------------------------------------------------
  28. VOID NEAR DrawTheControl(HCTL hctl, HWND hwnd, HDC hdc);
  29.  
  30.  
  31. //------------------------------------------------------
  32. // Generic Control Procedure
  33. //------------------------------------------------------
  34. LONG FAR PASCAL _export GenericCtlProc
  35. (
  36.     HCTL   hctl,
  37.     HWND   hwnd,
  38.     USHORT msg,
  39.     USHORT wp,
  40.     LONG   lp
  41. )
  42. {
  43.  
  44.     // Process messages of the VBX control.
  45.     switch (msg)
  46.         {
  47.         case WM_NCCREATE:
  48.          
  49.              // TODO: Add initialization code here
  50.          
  51.          
  52.              break;
  53.  
  54.         case WM_PAINT:
  55.                            
  56.              // Note: Write the control drawing code
  57.              //       inside the function DrawTheControl().
  58.          
  59.              if (wp)
  60.                 DrawTheControl(hctl, hwnd, (HDC)wp);
  61.              else
  62.                 {
  63.                 PAINTSTRUCT ps;
  64.                 BeginPaint(hwnd, &ps);
  65.                 DrawTheControl(hctl, hwnd, ps.hdc);
  66.                 EndPaint(hwnd, &ps);
  67.                 }
  68.          
  69.              break;
  70.  
  71.  
  72.         case VBM_SETPROPERTY:
  73.          
  74.              // NOTE: wp = Property that was just changed.
  75.              //       lp = New value of the property.
  76.  
  77.              switch (wp)
  78.                 {
  79.                 // TODO: Add a case for each custom property
  80.              
  81.                 }
  82.          
  83.              break;
  84.  
  85.         case WM_TIMER:
  86.              {
  87.              // TODO: Add timer code here
  88.  
  89.  
  90.  
  91.              break;
  92.              }
  93.  
  94.  
  95.         // TODO: Add cases for other events here
  96.  
  97.  
  98.         }
  99.  
  100.  
  101.     return VBDefControlProc(hctl, hwnd, msg, wp, lp);
  102. }
  103.  
  104.  
  105. //------------------------------------------------------
  106. // Initialize library. This routine is called when the
  107. // first client loads the DLL.
  108. //------------------------------------------------------
  109. int FAR PASCAL LibMain
  110. (
  111.     HANDLE hModule,
  112.     WORD   wDataSeg,
  113.     WORD   cbHeapSize,
  114.     LPSTR  lpszCmdLine
  115. )
  116. {
  117.     // Avoid warnings on unused formal parameters
  118.     wDataSeg    = wDataSeg;
  119.     cbHeapSize  = cbHeapSize;
  120.     lpszCmdLine = lpszCmdLine;
  121.  
  122.     hmodDLL = hModule;
  123.  
  124.     return 1;
  125. }
  126.  
  127.  
  128. //------------------------------------------------------
  129. // Register custom control. This routine is called by VB 
  130. // when the custom control DLL is loaded for use.
  131. //------------------------------------------------------
  132. BOOL FAR PASCAL _export VBINITCC
  133. (
  134.     USHORT usVersion,
  135.     BOOL   fRuntime
  136. )
  137. {
  138.     // Avoid warnings on unused formal parameters
  139.     fRuntime  = fRuntime;
  140.     usVersion = usVersion;
  141.  
  142.     // Register control(s)
  143.     return VBRegisterModel(hmodDLL, &modelGeneric);
  144. }
  145.  
  146.  
  147. //------------------------------------------------------
  148. // WEP
  149. //------------------------------------------------------
  150. // C7 and QCWIN provide default WEP:
  151. //------------------------------------------------------
  152. #if (_MSC_VER < 610)
  153.  
  154. int FAR PASCAL WEP(int fSystemExit);
  155.  
  156. //------------------------------------------------------
  157. // For Windows 3.0 it is recommended that the WEP
  158. // function reside in a FIXED code segment and be
  159. // exported as RESIDENTNAME.  This is accomplished
  160. // using the alloc_text pragma below and the related
  161. // EXPORTS and SEGMENTS directives in the .DEF file.
  162. //
  163. // Read the comments section documenting the WEP
  164. // function in the Windows 3.1 SDK "Programmers
  165. // Reference, Volume 2: Functions" before placing
  166. // any additional code in the WEP routine for a 
  167. // Windows 3.0 DLL.
  168. //------------------------------------------------------
  169. #pragma alloc_text(WEP_TEXT,WEP)
  170.  
  171. //------------------------------------------------------
  172. // Performs cleanup tasks when the DLL is unloaded.
  173. // WEP() is called automatically by Windows when the DLL
  174. // is unloaded (no remaining tasks still have the DLL 
  175. // loaded). It is strongly recommended that a DLL have a 
  176. // WEP() function, even if it does nothing but returns 
  177. // success (1), as in this example.
  178. //------------------------------------------------------
  179. int FAR PASCAL WEP
  180. (
  181.     int fSystemExit
  182. )
  183. {
  184.     // Avoid warnings on unused formal parameters
  185.     fSystemExit = fSystemExit;
  186.  
  187.     return 1;
  188. }
  189. #endif // C6
  190.  
  191. //------------------------------------------------------
  192.  
  193. //------------------------------------------------------
  194. // Draw inside the control.
  195. //------------------------------------------------------
  196. VOID NEAR DrawTheControl
  197. (
  198.     HCTL hctl,
  199.     HWND hwnd,
  200.     HDC  hdc
  201. )
  202. {
  203.    // Variables for the brush.
  204.    HBRUSH hbr;
  205.    HBRUSH hbrOld = NULL;
  206.  
  207.    // TODO: Define your own local variables here (if any)
  208.  
  209.    
  210.    
  211.    
  212.    // Select new brush, and save old brush.
  213.    hbr = (HBRUSH)SendMessage(GetParent(hwnd),
  214.           WM_CTLCOLOR, hdc, MAKELONG(hwnd,0));
  215.    if (hbr)
  216.       hbrOld = SelectObject(hdc, hbr);
  217.    
  218.    
  219.    // TODO: Add your drawing code here
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.    // Restore the old brush
  228.    if (hbrOld)
  229.       SelectObject(hdc, hbrOld);
  230.  
  231. }
  232.  
  233.